package com.scs.application.modules.finance.mapper;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.scs.application.core.mapper.IBaseMapper;
import com.scs.application.modules.finance.dto.BillItemDTO;
import com.scs.application.modules.finance.dto.SettlementMainDTO;
import com.scs.application.modules.finance.entity.Bill;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  Mapper 接口
 * </p>
 */
public interface BillMapper extends IBaseMapper<Bill> {

    List<BillItemDTO> findThisMonthMaterialUse(@Param(value="beginDate")Date beginDate);

    List<Bill> findThisYearOmocUse();

    List<Bill> findThisYearMaterialUse();


    int billPatient(String id);
    /**
     * 更新记账明细收费编码,收费价格
     * @param deptOprtUseId
     */
    void updateItemHis(@Param("deptOprtUseId") String deptOprtUseId);
    /**
     * 更新订单科室
     * @param oprtUseKey
     */
    void updateOrderDept(@Param("oprtUseKey") String oprtUseKey);
    //查询每天审核过的记账单
    List<Bill> findBill();
    //根据供应商id和科室id查询记账单号
    List<String> findBillId(@Param("deptId") String deptId,@Param("supplierId") String supplierId,@Param("flagOmoc") boolean flagOmoc,@Param("patientNo") String patientNo);
    //更新记账单推送状态
    int  updateByIdList(@Param("list") List<String> idList);


    //高值入账  page
    IPage<?> billHighPage(IPage page, @Param(Constants.WRAPPER) QueryWrapper<SettlementMainDTO> wrapper, @Param("params") Map<String, Object> params);

    //高值入账  list
    List<SettlementMainDTO> billHighList(@Param(Constants.WRAPPER) QueryWrapper<SettlementMainDTO> wrapper, @Param("params") Map<String, Object> params);


    //低值入账  page
    IPage<?> billLowPage(IPage page, @Param(Constants.WRAPPER) QueryWrapper<SettlementMainDTO> wrapper, @Param("params") Map<String, Object> params);

    //低值入账  list
    List<SettlementMainDTO> billLowList(@Param(Constants.WRAPPER) QueryWrapper<SettlementMainDTO> wrapper, @Param("params") Map<String, Object> params);


    //记账科室列表高值入账列表使用
    List<Map> getDeptListHigh(@Param(Constants.WRAPPER) QueryWrapper<SettlementMainDTO> wrapper);

    //记账科室列表低值入账列表使用
    List<Map> getDeptListLow(@Param(Constants.WRAPPER) QueryWrapper<SettlementMainDTO> wrapper);

    //顶部合计 高值入账列表使用
    Map sumTopHigh(@Param(Constants.WRAPPER) QueryWrapper<SettlementMainDTO> wrapper);

    //顶部合计 低值值入账列表使用
    Map sumTopLow(@Param(Constants.WRAPPER) QueryWrapper<SettlementMainDTO> wrapper);
}
